Questo articolo descrive come utilizzare dei nomi univoci e non modificabili per l'identificazione delle periferiche(o partizioni). Questo è stato reso possibile con l'introduzione di udev, e risulta vantaggioso anche rispetto ai nomi basati sul bus di connessione. Se la macchina ha più di un controller per i dischi SATA, SCSI o IDE, può succedere che l'ordine dei file nodo creati sia casuale. Questo può comportare ad esempio che le periferiche `/dev/**sda**` ed `/dev/**sdb**` siano invertite in modo casuale ad ogni avvio, impedendo al sistema di avviarsi, oppure determinando la scomparsa dei dispositivi a blocchi che vengono erroneamente rilevati. L'uso di nomi univoci risolve quindi il problema.

**Nota:** Non è necessario seguire questa guida nel caso in cui si stia utilizzando [LVM2](/index.php/LVM_(Italiano) "LVM (Italiano)"), dato che LVM2 si occupa anche di questo automaticamente.

## Contents

*   [1 Metodi di nomenclatura univoca](#Metodi_di_nomenclatura_univoca)
    *   [1.1 By-label](#By-label)
    *   [1.2 By-uuid](#By-uuid)
    *   [1.3 By-id e by-path](#By-id_e_by-path)
*   [2 Utilizzare i nomi univoci](#Utilizzare_i_nomi_univoci)
    *   [2.1 fstab](#fstab)
    *   [2.2 Boot manager](#Boot_manager)

## Metodi di nomenclatura univoca

Ci sono quattro differenti modi per assegnare dei nomi univoci alle periferiche:by-label,by-uuid,by-id e by-path. Nei paragrafi successivi verranno descritte le differenze tra i vari metodi e come vengono utilizzati.

### By-label

Quasi tutti i filesystem supportano le etichette. Tutte le partizioni che ne hanno una sono elencate nella cartella `/dev/disk/by-label`.

**Nota:** Questa cartella viene creata (e rimossa) dinamicamente, a seconda delle partizioni presenti ed aventi una etichetta.
 `$ ls -lF /dev/disk/by-label` 
```
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1

```

Le etichette possono essere cambiate utilizzando i seguenti comandi:

	swap 

```
# mkswap -L <label> /dev/XXX

```

**Attenzione:** Questo comando cancellerà l'area di swap.
Se la swap è montata, eseguire `swapoff /dev/XXX` prima e `swapon /dev/XXX` dopo.

	ext2/ext3/ext4 

```
# e2label /dev/XXX <label>

```

	btrfs 

```
# btrfs filesystem label /dev/XXX <label>

```

	reiserfs 

```
# reiserfstune -l <label> /dev/XXX

```

	jfs 

```
# jfs_tune -L <label> /dev/XXX

```

	xfs 

```
# xfs_admin -L <label> /dev/XXX

```

	fat/vfat (contenuto nel pacchetto mtools) 

```
# mlabel -i /dev/XXX ::<label>

```

	ntfs (contenuto nel pacchetto [ntfs-3g](https://www.archlinux.org/packages/?name=ntfs-3g)) 

```
# ntfslabel /dev/XXX <label>

```

**Attenzione:** Le etichette dovranno essere uniche per rendere efficace questo metodo, e non superare i 16 caratteri.

### By-uuid

Gli [UUID](https://en.wikipedia.org/wiki/UUID "wikipedia:UUID"), ovvero *Universally Unique Identifier(identificatore unico universale)*, è un meccanismo che assegna ad ogni filesystem un identificatore unico. Esso è studiato in modo da evitare conflitti. Tutti i filesystem GNU/Linux (inclusa l'area di swap) supportano gli UUID. I filesystem FAT ed NTFS non supportano gli UUID, ma sono comunque elencate in `/dev/disk/by-uuid` con un identificatore unico:

 `$ ls -lF /dev/disk/by-uuid/` 
```
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 2d781b26-0285-421a-b9d0-d4a0d3b55680 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 31f8eb0d-612b-4805-835e-0e6d8b8c5591 -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 3FC2-3DDB -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 5090093f-e023-4a93-b2b6-8a9568dd23dc -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 912c7844-5430-4eea-b55c-e23f8959a8ee -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 B0DC1977DC193954 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 bae98338-ec29-4beb-aacf-107e44599b2e -> ../../sdb2

```

Come si può notare, le partizioni FAT ed NTFS (le partizioni aventi etichetta *fat* e *windows* nell'esempio precedente) hanno nomi più corti, ma vengono comunque elencate. Il vantaggio nell'uso degli UUID sta nel fatto che è molto meno probabile avere conflitti rispetto al metodo delle etichette. Uno svantaggio è invece che i nomi sono molto meno immediati da leggere o ricordare.

### By-id e by-path

In `by-id` viene creato un nome dipendente dal numero seriale dell'hardware. In `by-path` invece viene creato un nome unico dipendente dal più corto percorso fisico (secondo sysfs). In entrambi i percorsi sono contenute delle stringhe per indicare il tipo a cui appartengono(es. "-ide-" in 'by-path', ed "-ata-" in 'by-id'), comunque entrambi i metodi non sono adatti alla risoluzione del problema menzionato all'inizio dell'articolo. Non saranno quindi approfonditi oltre.

## Utilizzare i nomi univoci

A seconda del metodo scelto, ecco come abilitarlo sul proprio sistema:

### fstab

Per abilitare i nomi univoci in `/etc/fstab` sostituire il nome della periferica assegnata dal kernel nella prima colonna con il corrispondente percorso:

```
/dev/disk/by-label/home ...
/dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591 ...

```

oppure specificare direttamente il nome univoco usando un prefisso:

```
LABEL=home ...
UUID=1f8eb0d-612b-4805-835e-0e6d8b8c5591 ...

```

### Boot manager

Per usare i nomi univoci nel proprio boot manager, sarà necessario soddisfare i seguenti requisiti:

*   Il sistema usa un initramfs creato mediante [mkinitcpio](/index.php/Mkinitcpio_(Italiano) "Mkinitcpio (Italiano)")
*   Nel file `/etc/mkinitcpio.conf` sia abilitato l'hook udev
*   L'immagine initramfs è stata generata, con una versione di *klibc-udev* superiore alla **101-3**(**con le versioni precedenti i nomi univoci non funzionano correttamente.**). Se si aggiorna *klibc-udev* da una versione precedente e si intende usare i nomi univoci, rigenerare l'immagine initramfs prima di riavviare.

Nell'esempio precedente, `/dev/sda1` è la partizione di root. Nel file `/boot/grub/menu.lst` di [GRUB Legacy](/index.php/GRUB_Legacy_(Italiano) "GRUB Legacy (Italiano)"), la riga *kernel* sarà simile a questa:

```
kernel /boot/vmlinuz-linux root=/dev/sda1 ro quiet

```

A seconda del metodo che si intende utilizzare, cambiare la riga come una delle seguenti:

```
kernel /boot/vmlinuz-linux root=/dev/disk/by-label/root ro quiet

```

oppure

```
kernel /boot/vmlinuz-linux root=/dev/disk/by-uuid/2d781b26-0285-421a-b9d0-d4a0d3b55680 ro quiet

```

Se si usa [LILO](/index.php/LILO "LILO"), non inserire il nome univoco nell'opzione `root=...`, non funzionerebbe. Sarà invece necessario usare le opzioni `append="root=..."` o `addappend="root=..."`. Consultare il manuale di LILO per maggiori informazioni riguardo alle opzioni *append* ed *addappend*.

C'è un metodo alternativo per usare le etichette dei filesystem. Ad esempio se (come nell'esempio) il filesystem `/dev/sda1` ha l'etichetta "root", sarà possibile usare la seguente linea in GRUB:

```
 kernel /boot/vmlinuz-linux root=LABEL=root ro quiet

```